/*
 * Copyright 2016 ZXing authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.zxing.oned;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.BitMatrixTestCase;
import org.junit.Assert;
import org.junit.Test;

/**
 * Tests {@link Code93Writer}.
 */
public final class Code93WriterTestCase extends Assert {

  @Test
  public void testEncode() {
    doTest("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
           "000001010111101101010001101001001101000101100101001100100101100010101011010001011001" +
           "001011000101001101001000110101010110001010011001010001101001011001000101101101101001" +
           "101100101101011001101001101100101101100110101011011001011001101001101101001110101000" +
           "101001010010001010001001010000101001010001001001001001000101010100001000100101000010" +
           "10100111010101000010101011110100000");

    doTest("\u0000\u0001\u001a\u001b\u001f $%+!,09:;@AZ[_`az{\u007f",
           "00000" + "101011110" +
           "111011010" + "110010110" + "100100110" + "110101000" +  // bU aA
           "100100110" + "100111010" + "111011010" + "110101000" +  // aZ bA
           "111011010" + "110010010" + "111010010" + "111001010" +  // bE space $
           "110101110" + "101110110" + "111010110" + "110101000" +  // % + cA
           "111010110" + "101011000" + "100010100" + "100001010" +  // cL 0 9
           "111010110" + "100111010" + "111011010" + "110001010" +  // cZ bF
           "111011010" + "110011010" + "110101000" + "100111010" +  // bV A Z
           "111011010" + "100011010" + "111011010" + "100101100" +  // bK bO
           "111011010" + "101101100" + "100110010" + "110101000" +  // bW dA
           "100110010" + "100111010" + "111011010" + "100010110" +  // dZ bP
           "111011010" + "110100110" +  // bT
           "110100010" + "110101100" +  // checksum: 12 28
           "101011110" + "100000");
  }

  private static void doTest(String input, CharSequence expected) {
    BitMatrix result = new Code93Writer().encode(input, BarcodeFormat.CODE_93, 0, 0);
    assertEquals(expected, BitMatrixTestCase.matrixToString(result));
  }

  @Test
  public void testConvertToExtended() {
    // non-extended chars are not changed.
    String src = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";
    String dst = Code93Writer.convertToExtended(src);
    assertEquals(src, dst);
  }

}
